-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: widget does not load when navigating on pages with view transition [CW-3249] #9443
Conversation
@pranavrajs @fayazara PTAL |
Quick question - is this intended? @scmmishra CleanShot.2024-05-15.at.11.20.16.mp4 |
Yeah, once the widget remounts, the iframe is forced to render again, nothing we can do about it. There are some implementations that require installing |
…on [CW-3249] (chatwoot#9443) * feat: add ids to each element * feat: restore elements for apps that use view transitions * fix: remove generator check condition * feat: handle turbolinks * fix: new body handling * chore: undo debug changes
This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
When visiting another page in turbo, the
body
is replaced completely, this makes the navigation more SPA like. However the new body does not contain any of the elements added by a client script. This causes the SDK to fail.This PR fixes this by restoring all the elements when rendering the new body. The alternative is re-running the script, however our SDK needs more changes to support resuming, besides it causes the widget to disappear and come back, making it the inferior choice in terms of UX
Something similar happens with Astro with view transitions, this PR fixes that too
The fix
restoreWidgetInDOM
method toDOMHelpers
this does the work of replacing the elements as required.turbo:before-render
andastro:before-swap
Things to note
While not necessary, we need to add
data-turbo-eval="false"
to the widget embed script, otherwise the sdk script tag will keep getting added with each navigation. It won't affect the widget.This is not an issue with astro, since it's default behaviour is to no re-run scripts
P.S. We can remove the conditions that check if a site uses
turbo
orastro